package projeto.comercial.oportunidade.cgd;

import java.util.Collection;

import javax.persistence.Query;

import org.springframework.stereotype.Repository;

import plataforma.base.cdp.Criterio;
import plataforma.base.cdp.IObjetoComArquivo;
import plataforma.base.cdp.ObjetoPagina;
import plataforma.crudestatico.cgd.DaoBase;
import projeto.administrativo.colaboradorexterno.cdp.Informacao;
import projeto.comercial.oportunidade.cdp.OportunidadeServico;

@Repository
public class DaoOportunidade extends DaoBase<OportunidadeServico>{
	
	@Override
	public OportunidadeServico recuperarPorId(Long id) {
		String hql = "select distinct o from OportunidadeServico o "				
				+ " left outer join fetch o.interacoes"
				+ " left outer join fetch o.contatos"
				+ " left outer join fetch o.informacoes"
				+ " left outer join fetch o.kServico" 
				+ " where o.id=:parId";

		Query query = getEntityManager().createQuery(hql);
		query.setParameter("parId", id);

		return (OportunidadeServico) query.getSingleResult();
	}
	
	
	//TODO NANDOPHO Passar para tipo parametrizado
		public Collection<OportunidadeServico> recuperarTodosPaginado(ObjetoPagina objetoPagina) {


			StringBuilder sb = new StringBuilder();
			sb.append("select o from OportunidadeServico o left outer join fetch o.kServico ");

			// adicionando where
			sb.append(" where 1=1 ");

			if (objetoPagina.getCriteriosSimples() != null) {

				for (Criterio criterio : objetoPagina.getCriteriosSimples()) {

					sb.append(" and " + criterio.toHQL());

				}

			}
			if (objetoPagina.getCriterioOrdenacao() != null)
				sb.append(" order by "
						+ objetoPagina.getCriterioOrdenacao().toString());

			Query consulta = getEntityManager().createQuery(sb.toString());
			consulta.setFirstResult(objetoPagina.getFirstResults());
			consulta.setMaxResults(objetoPagina.getMaxResults());

			return (Collection<OportunidadeServico>) consulta.getResultList();

		}
		
		
		@Override
		public int recuperarQteTodos(ObjetoPagina objetoPagina) {
					
			StringBuilder sb = new StringBuilder();
			sb.append(" select count(id) from OportunidadeServico o");
			// adicionando where
			sb.append(" where 1=1 ");

			if (objetoPagina.getCriteriosSimples() != null) {

				for (Criterio criterio : objetoPagina.getCriteriosSimples()) {

					sb.append(" and " + criterio.toHQL());

				}

			}

			Long count = (Long) getEntityManager().createQuery(sb.toString())
					.getSingleResult();

			return count.intValue();
		}


		
}

